package org.example.model;

import org.example.api.ImageServelt;
import org.example.dao.ImageDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

@WebServlet("/imageShow")
public class ImageShowServlet extends HttpServlet {

    //获取图片内容接口：Get /imageShow?imageId = 1
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求数据：获取图片id
        String imageId = req.getParameter("imageId");
        //2.根据图片id，在数据库查询图片数据（包含path字段：路径后缀）
        ImageInfo imageInfo = ImageDao.selectOne(Integer.parseInt(imageId));
        // 3.返回响应：读取本地图片文件，把二进制数据设置到响应体
        //读取本地图片：完整路径=路径前缀+路径后缀（path字段）
        String path = ImageServelt.LOCAL_PATH_PREFIX + imageInfo.getPath();

        //读取这个路径的文件
        //读取方式一：通过FileInputStream文件输入字节流来读取（参考io操作的代码）
        //读取方式二：byte[] b = Files.readAllBytes(path) 是工具方法，读取一个路径的所有数据，
        //Path对象，可以通过File对象转换
        File pic = new File(path);
        byte[] data = Files.readAllBytes(pic.toPath());

        //把图片二进制数据，写入到响应正文
        //严格来说要设置响应数据格式Content-Type,但前端是<img>使用，所以没有也可以
        resp.getOutputStream().write(data);

    }
}
